package hash

import (
	"crypto/sha1"
	"hash"
)

// Sha1Hash SHA1哈希
type Sha1Hash struct {
	hash   hash.Hash
	digest []byte
}

// Init 初始化
func (sh *Sha1Hash) Init() {
	if sh.hash == nil {
		sh.hash = sha1.New()
	} else {
		sh.hash.Reset()
		sh.digest = sh.digest[:0]
	}
}

// Update 更新数据
func (sh *Sha1Hash) Update(b []byte) {
	sh.hash.Write(b)
}

// Finalize 计算摘要
func (sh *Sha1Hash) Finalize() []byte {
	sh.digest = sh.hash.Sum(nil)
	return sh.digest
}

// Digest 获取摘要
func (sh *Sha1Hash) Digest() []byte {
	return sh.digest
}

// Size 获取摘要的字节长度
func (sh *Sha1Hash) Size() int {
	return sha1.Size
}
